# include <stdio.h>
# define MaxSize 100 
typedef int DataType ;

typedef struct{
	DataType list[MaxSize];
	int size;
} SeqList;


/*初始 化顺序表 L*/
void ListInitiate(SeqList* L) {
	L->size = 0;
}
/*返回顺序表 L 的当前数据元素个数*/
int ListLength(SeqList L){
	
	return L.size;
}


int ListInsert(SeqList* L, int i, DataType x) {
	/*在顺序表 L 的位置i（0<= i <= size ）前插入数据元素值x*/
	/*插入成功返回1，插入失败返回0*/
	int j;
	if (L->size >= MaxSize) {
		printf("顺序表已满无法插入！\n");
		return 0;
	}
	else if (i <0 || i> L->size) {
		printf("参数i不合法！\n");
		return 0;
	}
	else {
		//此段程序有错误
		for (j = L->size;j > i; j--){
			L->list[j] = L->list[j - 1];
		}	
		L->list[i] = x;/*插入*/
		L->size++; /*元素个数加1*/
		return 1;
	}
	return 0;
}


int ListDelete(SeqList* L, int i, DataType* x){
	/*删除顺序表 L 中位置i(0 <= i <= size-1）的数据元素值并存放到参数x中*/
	/*删除成功返回1，剖除失败返回0 */
	int j;
	if (L->size <= 0) {
		printf("顺序表已空无数据元素可删！ n 'リ");
		return 0;
	}
	else if (i < 0 || i > L->size - 1) {
		printf("＂参数 i 不合法");
		return 0;
	}
	else{
		/*此段程序有错误*/
		*x = L->list[i]; /*保存删除的元素到参数x中*/
		for (j = i + 1; j <= L->size - 1; j++) {
			L->list[j-1] = L->list[j]; //依次前移
		}
		L->size--; /*数据元素个数减1*/
		return 1;
	}
}


int ListGet(SeqList L, int i, DataType* x){
	//取顺序表 L 中第 i 个数据元素的值存于x中，成功则返回1，失败返回0* / 
	
	if (i < 0 || i > L.size - 1) {
		printf("参数 i 不合法！ /n ");
		return 0;
	}
	
	else {
		*x = L.list[i];
		return 1;
	}
}


/*  

	有错误：实现函数体，实现在 L 内查找x。
	当x存在于L中时,返回x所在的索引的最小值；
	当 x不存在于于L中时，返回﹣1。
	
*/
int ListSearch(SeqList L, DataType x) {
	int i = 0;
	for(i=0;i < L.size;i++){
		if(L.list[i] == x){
			return i;
			break;
		}
		else 
			return -1;	
	}
}

int main(int argc, char* argv[]) {
	SeqList myList;
	int i, x;
	ListInitiate(&myList);
	for (i = 0; i < 10; i++){
		ListInsert(&myList, i, i+1);//插入十个元素
	}
	
	ListDelete(&myList, 4, &x);//删除4号位置元素
	for (i = 0; i < ListLength(myList); i++) {
		//此段程序有一处错误
		ListGet(myList,i, &x);
		printf("%d",x);
	}
	  return 0;
}
/*
第三次提交
*/
